// 群聊消息
module.exports = app => {
  const mongoose = app.mongoose;
  const Schema = mongoose.Schema;

  const WxchatroomdbSchema = new Schema({
    type: { type: String, default: 'recvMsg' },
    desc: { type: String, default: '收到消息' },
    data: {
      timeStamp: { type: Number, required: true },
      fromType: { type: String, required: true }, // 来源类型：1|私聊 2|群聊 3|公众号
      msgType: { type: String, required: true }, // 消息类型：1|文本 3|图片 34|语音 42|名片 43|视频 47|动态表情 48|地理位置 49|分享链接或附件 2001|红包 2002|小程序 2003|群邀请 10000|系统消息
      msgSource: { type: Number, default: 0 },
      fromWxid: { type: String, required: true }, // fromType=1时为好友wxid，fromType=2时为群wxid，fromType=3时公众号wxid
      finalFromWxid: { type: String, required: true }, // 仅fromType=2时有效，为群内发言人wxid
      atWxidList: [{ type: String }], // 被 @ 的 wxid 列表（可选）仅fromType=2时有效，为消息中艾特人wxid列表
      silence: { type: Boolean, default: false }, // 是否静默消息（可选） 仅fromType=2时有效，0
      finalfrom_groupnick: { type: String }, // 发消息者的群昵称（可选） 仅fromType=2时有效，群成员数量
      membercount: { type: Number }, // 群成员数量（可选）
      msg: { type: String, default: '' }, // 消息内容（可为空，视 msgtype 而定）
      signature: { type: String, default: '' }, // 签名（可选）
      msgId: { type: String, default: ''}, // 消息 ID（可选）
      sendId: { type: String, default: '' }, // 发送 ID（可选）
    },
    timestamp: { type: Number, required: true }, // 收到这条消息的13位现行时间戳
    wxid: { type: String, required: true }, // 当前登录的微信id
    port: { type: Number, required: true }, // httpapi 监听端口号
    pid: { type: Number, required: true }, // 进程号
    flag: { type: Number, required: true }, // websocket 监听端口号
    date: { type: Date, default: Date.now }, // 转换后的时间（方便查询）
    issend: { type: Boolean, default: false }, // 是否已转发
    tags: [{ type: String }], // 自定义标签分组，可多个
    ai: {
      isread: { type: Boolean, default: false }, // Ai是否已读
      weight: { type: Number, default: 0 }, // 权重 0不重要，1重要，2非常重要
      reply: { type: String, default: '' }, // 回复内容
    },
  });

  // 索引建议（提高查询效率）
  WxchatroomdbSchema.index({ 'data.fromWxid': 1, 'data.msg': 1 });
  WxchatroomdbSchema.index({ 'data.finalFromWxid': 1 });
  WxchatroomdbSchema.index({ timestamp: -1 });
  WxchatroomdbSchema.index({ date: -1 });
  WxchatroomdbSchema.index({ issend: 1 });
  WxchatroomdbSchema.index({ isread: 1 });
  WxchatroomdbSchema.index({ tags: 1 });
  WxchatroomdbSchema.index({ 'ai.isread': 1 });

  return mongoose.model('Wxchatroomdb', WxchatroomdbSchema, 'wxchatroomdb');
};
